//
//  Pthread_mutexLockDemo2.m
//  JKThreadTest
//
//  Created by 王冲 on 2018/10/24.
//  Copyright © 2018年 JK科技有限公司. All rights reserved.
//

#import "Pthread_mutexLockDemo2.h"

#import <pthread.h>

@interface Pthread_mutexLockDemo2 ()

@property(nonatomic,assign) pthread_mutex_t mutex;

@end

@implementation Pthread_mutexLockDemo2

- (void)__initMutex:(pthread_mutex_t *)mutex
{
        // 递归锁：允许同一个线程对一把锁进行重复加锁
    
        // 初始化属性
        pthread_mutexattr_t attr;
        pthread_mutexattr_init(&attr);
        pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
        // 初始化锁
        pthread_mutex_init(mutex, &attr);
        // 销毁属性
        pthread_mutexattr_destroy(&attr);
}

-(instancetype)init{
    
    if (self = [super init]) {
        
        // 初始化锁
        [self __initMutex:&_mutex];
    }
    
    return self;
}

/**
 线程1：otherTest（+-）
 otherTest（+-）
 otherTest（+-）
 
 线程2：otherTest（等待）
 */

- (void)otherTest
{
    pthread_mutex_lock(&_mutex);
    
    NSLog(@"%s", __func__);
    
    static int count = 0;
    if (count < 10) {
        count++;
        [self otherTest];
    }
    
    pthread_mutex_unlock(&_mutex);
}

//- (void)otherTest2
//{
//    pthread_mutex_lock(&_mutex2);
//
//    NSLog(@"%s", __func__);
//
//    pthread_mutex_unlock(&_mutex2);
//}

@end
